/**
 *
 * @params  包含权限字段的全量菜单
 * @params  权限字段
 * @returns 过滤后的动态菜单
 *
 */

function filterMenuByPermissions(menu: any, permissions: any) {
  return menu
    .filter((item: any) => {
      if (item.permissions && item.permissions.length > 0) {
        // 通过filter去遍历menu的第一层，有没有permissions字段
        return item.permissions.some((v: any) =>
          // 如果有的话就通过some去遍历这个字段的每一项，看它的每一项是否在权限数组中
          // 如果包含的话就保留这一项
          permissions.includes(v)
        );
      }
      return true; // 如果没有permission则默认保留
    })
    .map((item: any) => {
      // 通过map遍历过滤完的数组，判断有无children，有则递归
      if (item.children && item.children.length > 0) {
        item.children = filterMenuByPermissions(item.children, permissions);
      }
      return item; // 如果没有则原封不动保留这一项
    });
}

export default filterMenuByPermissions;
